#pragma once
#include "sentencia.h"
#include "Variable.h"
#include "CasoList.h"
class Caso :
	public Sentencia
{
public:

	Caso(Sentencia *next,Variable* variable,CasoList *casolist,Sentencia *instrucciones):Sentencia(next)
	{
		this->variable=variable;
		this->casolist=casolist;
		this->instrucciones=instrucciones;
	}

	~Caso(void)
	{
	}
	virtual string is(){
		return "CASO";
	}

	Variable* getVariable(){
		return this->variable;
	}

	CasoList* getCasoList(){
		return this->casolist;
	}

	Sentencia* getInstrucciones(){
		return this->instrucciones;
	}


	void setVariable(Variable* variable){
		this->variable=variable;
	}

	void setCasoList(CasoList *casolist){
		this->casolist = casolist;
	}

	void setInstrucciones(Sentencia *instrucciones){
		this->instrucciones = instrucciones;
	}



	virtual tipo_ts * validarSemantica(tabla_simbolos *tabla_de_tipo,tabla_simbolos *tabla_de_varaible){
		tipo_ts *tts = this->variable->validarSemantica(tabla_de_tipo,tabla_de_varaible);
		if(this->casolist!=0){
			this->casolist->setVariable(tts);
			this->casolist->validarSemantica(tabla_de_tipo,tabla_de_varaible);
		}
		if(this->instrucciones!=0){
			this->instrucciones->validarSemantica(tabla_de_tipo,tabla_de_varaible);
		}
		if(this->getNext()!=0){
		this->getNext()->SetReturn(this->GetReturn());
		this->getNext()->validarSemantica(tabla_de_tipo,tabla_de_varaible);
		}
	return 0;
	}

private:
	Variable *variable;
	CasoList *casolist;
	Sentencia *instrucciones;

};

